iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 18
1
Cloud

用30天來建構和操作Apache Mesos系列 第 18

Day18:在Mesos上執行CI Server

  • 分享至 

  • xImage
  •  

今天來介紹如何在Mesos上部署CI Server使用jenkins,我們為什麼要把jenkins server建構在Mesos上?因為jenkins會有單點故障的問題造成無法測試和建構程式,所以可以透過使用Mesos和Marathon的方式,當jenkins當掉之後可以在其它的Mesos Slave的節點上把jenkins重新啟動起來,另外也可以有效的管理整個cluster上的資源分配。

在以下的demo使用最簡單的方式就是直接透過marathon把jenkins的war部署在Mesos環境上,另外在jenkins上可以使用更複雜的架構例如master、salve的架構,master用來分配任務到slave執行的方式,在這裡就不實際的去demo了,如果有興趣的話可以先去了解jenkins的架構和設定方式,未來有需求在透過marathon或其它的Framework整合在Mesos平台上這是一個很好的選擇。

以下就簡單的demo要如何在Mesos環境上部署standalone的jenkins CI Server

使用前的準備:

1.啟動mesos master,可以參考day3

2.啟動mesos slave,可以參考day3

3.啟動marathon framework,可以參考day7

在這邊我的啟動marathon指令有所調整,主要的原因是因為jenkins的port也是8080,所以我調整了marathon的WebUI Port,指令如下:

# cd /opt/marathon-0.8.0/bin
# ./start --master 192.168.182.132:5050 --http_port 8181

開始在Mesos和Marathon上建構jenkins server:

啟動完mesos和marathon之後,先下載jenkins的war檔到每台的mesos slave上,並且放在/opt目錄下面如以下指令:

# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war -P /opt

下載完jenkins之後寫下面啟動marathon的json file:

vi jenkins.json
{
  "id": "jenkins",
  "cmd": "java -jar /opt/jenkins.war",
  "mem": 1024,
  "cpus": 0.5,
  "instances": 1
}

使用curl指令部署jenkins server,指令如下:

curl -X POST -H "Content-Type: application/json" http://192.168.182.132:8181/
v2/apps -d @jenkins.json

執行結果畫面如下:

http://ithelp.ithome.com.tw/upload/images/20161218/20103456aja6FGl8bC.png

http://ithelp.ithome.com.tw/upload/images/20161218/20103456qJkiTdobnN.png

其實以上的部署還可以做到更好更完整,例如可以讓marathon自動的去下載war檔進行部署,而不用手動的去mesos slave上每台都下載。

另外也可以把jenkins的架構改成master slave的方式,使得在大型的專案上test code和build code的速度可以加快不會被queue住,這些都是在未來我有時間的狀態內需要練習的部份。

參考資料:

Jenkins: https://jenkins.io/download/


上一篇
Day17:Spark執行在Mesos平台上(二)
下一篇
Day19:Mesos Framework Chronos(一)
系列文
用30天來建構和操作Apache Mesos30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言